package com.nuanshui.heatedloan.order.integration.execute.handler;

import com.nuanshui.heatedloan.order.integration.bean.OrderResult;
import com.nuanshui.heatedloan.order.integration.form.OrderExecuteForm;

/**
 * hander的super接口
 * Hander的存在的意义，是为了将订单操作的某些步骤一些公用操作给抽取出来，如
 *  日志
 *  同步
 *  生成订单(步骤)之后的发短信(操作)
 *  生成订单(步骤)之后的订单失效定时任务(操作)
 *  等等
 * 如果一个操作，并不是很复杂，或者并不需要单独抽出来，则直接在abstractOrderExecute里面写公用的，或者每个具体的bizExecute写方法。
 * @Author: Gonzo
 * @Date 2017/3/23下午4:07
 * @since 1.4.2
 */
public interface OrderHandler {

    /**
     * 执行生成订单的一系列操作
     * @Author: Gonzo
     * @Date 2017/3/23下午6:41
     * @since 1.4.2
     */
    OrderResult placeOrder(OrderExecuteForm form, OrderResult result);
    /**
     * 订单支付成功
     * @Author: Gonzo
     * @Date 2017/4/13下午5:07
     * @since 1.4.2
     */
    OrderResult paySuccessOrder(OrderExecuteForm form, OrderResult result);


    /**
     * 取消
     * @Author: Gonzo
     * @Date 2017/4/13下午5:53
     * @since 1.4.2
     */
    OrderResult cancelOrder(OrderExecuteForm form, OrderResult result);

    /**
     * 校验
     * @Author: Gonzo
     * @Date 2017/4/13下午5:54
     * @since 1.4.2
     */
    OrderResult verifyAppointmentOrder(OrderExecuteForm form, OrderResult result);



    void setNextOrderHandler(OrderHandler orderHandler);

}
